<?php

class AreaConhecimento
{
	private $idArea;
	private $idGrupo;
	private $area;
	
	public static function inserir ($idGrupo, $area, $novoGrupo = false) {
		if (AreaConhecimento::validar($idGrupo, $area, $novoGrupo)) {
			$strQuery	=	'INSERT INTO areasConhecimento VALUES(default, ' . $idGrupo . ', "' . $area . '");';
			
			return BancoDados::query($strQuery);
		}
		else {
			return false;
		}
	}
	
	public static function validar ($idGrupo, $area, $novoGrupo) {
		$valida	=	true;
		
		if (!validaAlfabetico($area, constant('__TAM_NOME_AREA_GRUPOS_DE_CONHECIMENTO__')) || ($area == 'Outra' && !$novoGrupo)) {
			$valida	=	false;
			adicionaMensagem(texto('MENSAGEM_ERRO_VALIDACAO_AREA_DE_CONHECIMENTO', array($area)));
		}
		
		return $valida;
	}
	
	public static function excluir($idArea) {
		$strQuery	=	'DELETE FROM areasConhecimento WHERE idArea = ' . $idArea . ';';
		
		return	BancoDados::query($strQuery);
	}
	
	/**
	 * Retorna as Areas de Conhecimento de um Determinado Grupo
	 * @return 
	 * @param object $idGrupo
	 * @param object $ordem
	 * @param object $paginaAtual
	 */
	public static function buscar ($idGrupo = NULL, $area = NULL, $ordenacaoAtual = NULL, $ordemAtual = NULL, $resultadosPagina = NULL, $paginaAtual = NULL){
		if (AreaConhecimento::validarBusca($idGrupo, $area)) {
			$strQuery	=	'SELECT * FROM areasConhecimento WHERE ';
			
			$strQuery	.=	$idGrupo != NULL ? 'idGrupo = ' . $idGrupo . ' AND ' : '';
			
			//CONSERTANDO FINAL DA QUERY
			$strQuery	=	preg_replace('/WHERE $/', '', $strQuery);
			$strQuery	=	preg_replace('/AND $/', '', $strQuery);
			
			$strQueryCount	=	'SELECT COUNT(*) AS qtdResultados FROM (' . $strQuery . ') AS queryOriginal;';
			
			$resultadoCount	=	BancoDados::query($strQueryCount);
			if(is_array($resultadoCount)) {
				foreach($resultadoCount as $resultado) {
					$qtdResultados	=	$resultado['qtdResultados'];
				}
				
				if ($qtdResultados > 0) {
					$paginaAtual	=	$paginaAtual == NULL ? 1 : $paginaAtual;
					$ordenacaoAtual	=	$ordenacaoAtual == NULL ? 'area' : $ordenacaoAtual;
					$ordemAtual		=	$ordemAtual == NULL ? 'ASC' : ($ordemAtual == 'desc' ? 'DESC' : 'ASC');
					
					$strQuery	.=	' ORDER BY ' . $ordenacaoAtual . ' ' . $ordemAtual;
					
					if ($resultadosPagina != NULL) {
						$qtdPaginas		=	ceil($qtdResultados / $resultadosPagina);
						$qtdPaginas		=	$qtdPaginas == 0 ? 1 : $qtdPaginas;
						
						$strQuery		.=	' LIMIT ' . $resultadosPagina . ' OFFSET ' . (($paginaAtual - 1) * $resultadosPagina);
					}
					else {
						$qtdPaginas	=	1;
					}
					
					$strQuery	.=	';';
					
					$resultado	=	BancoDados::query($strQuery);
					
					if (is_array($resultado)) {
						return array ('listaResultados' => $resultado, 'qtdResultadosTotal' => $qtdResultados, 'qtdPaginas' => $qtdPaginas);
					}
					else {
						return false;
					}
				}
				else {
					return array('listaResultados' => array(), 'qtdResultadosTotal' => 0, 'qtdPaginas' => 0);
				}
			}
			else {
				return false;
			}
		}
		else {
			return false;
		}
	}
	
	public static function validarBusca($idGrupo, $area) {
		$validou	=	true;
		
		//TODO VALIDACAO
		
		return $validou;
	}

    
   /**
    * 
    * @param boolean $exibir [optional]
    * @return 
    */
    public function getArea($exibir = false) {
        return $this->getArea() == 'Outra' && $exibir ? texto('DADOS_OUTRA_AREA_DE_CONHECIMENTO') : $this->getArea();
    }
    
    /**
     * Sets $area.
     *
     * @param object $area
     * @see AreaConhecimento::$area
     */
    public function setArea($area) {
        $this->area = $area;
    }
    
    /**
     * Returns $idArea.
     *
     * @see AreaConhecimento::$idArea
     */
    public function getIdArea() {
        return $this->idArea;
    }
    
    /**
     * Sets $idArea.
     *
     * @param object $idArea
     * @see AreaConhecimento::$idArea
     */
    public function setIdArea($idArea) {
        $this->idArea = $idArea;
    }
    
    /**
     * Returns $idGrupo.
     *
     * @see AreaConhecimento::$idGrupo
     */
    public function getIdGrupo() {
        return $this->idGrupo;
    }
    
    /**
     * Sets $idGrupo.
     *
     * @param object $idGrupo
     * @see AreaConhecimento::$idGrupo
     */
    public function setIdGrupo($idGrupo) {
        $this->idGrupo = $idGrupo;
    }
    }

?>